#pragma once
#include "uart/ProtocolSender.h"
#include "uart/ProtocolSender.h"
#include "uiplayer/ImageAnimView.h"
#include "can/context.h"
#include "logic_utility.hpp"
#include "uiplayer/WindowManager.hpp"

namespace{
	CanDataCb _s_can_cb;
	// 窗口列表
	std::vector<ZKWindow*> globalWindows;
	// 创建窗口管理器
	WindowManager windowManager;

	void setActivityWin(key_operation_e& operation){
		switch(operation){
		case KEY_UP:{
			EASYUICONTEXT->openActivity("mode2Activity");
		}break;
		case KEY_DOWN:
			EASYUICONTEXT->openActivity("mode4Activity");
			break;
		case KEY_LEFT:
	        windowManager.hideCurrentAndShowPrevious();  // 隐藏当前窗口，显示上个窗口
			break;
		case KEY_RIGHT:
	        windowManager.hideCurrentAndShowNext();  // 隐藏当前窗口，显示下个窗口
			break;
		default:
			return;
		}
	}
	void LongEnterSet(key_operation_e& operation) {
		switch (operation) {
//		case KEY_UP:{
//			EASYUICONTEXT->openActivity("SetupActivity");
//		}break;
		default:
			return;
		}
	}
	void key_value_cb(key_value_t& canData){
		if (canData.pre_status == 1 && canData.status == 0)	//短按
		{
			setActivityWin(canData.operation);
		}else if(canData.pre_status == 1 && canData.status == 2)	//长按
		{
			LongEnterSet(canData.operation);
		}
	}
	void _can_add_cb() {
		_s_can_cb.key_value_cb = key_value_cb;

		can::add_cb(&_s_can_cb);
	}

	void _can_remove_cb() {
		can::remove_cb(&_s_can_cb);
	}

	void Initialization(){

	}
	void set_font(){

	}

}


static S_ACTIVITY_TIMEER REGISTER_ACTIVITY_TIMER_TAB[] = {
	//{0,  6000}, //定时器id=0, 时间间隔6秒
	//{1,  1000},
};

/**
 * 当界面构造时触发
 */
static void onUI_init(){
	set_font();
	globalWindows = {
		mWinGaugePtr,

	};

    windowManager.setWindows(globalWindows);
}

/**
 * 当切换到该界面时触发
 */
static void onUI_intent(const Intent *intentPtr) {
    if (intentPtr != NULL) {
        //TODO
    }
}

/*
 * 当界面显示时触发
 */
static void onUI_show() {
	_can_add_cb();
	Initialization();
}

/*
 * 当界面隐藏时触发
 */
static void onUI_hide() {
	_can_remove_cb();
}

/*
 * 当界面完全退出时触发
 */
static void onUI_quit() {

}

/**
 * 串口数据回调接口
 */
static void onProtocolDataUpdate(const SProtocolData &data) {

}

/**
 * 定时器触发函数
 * 不建议在此函数中写耗时操作，否则将影响UI刷新
 * 参数： id
 *         当前所触发定时器的id，与注册时的id相同
 * 返回值: true
 *             继续运行当前定时器
 *         false
 *             停止运行当前定时器
 */
static bool onUI_Timer(int id){
	switch (id) {

		default:
			break;
	}
    return true;
}

/**
 * 有新的触摸事件时触发
 * 参数：ev
 *         新的触摸事件
 * 返回值：true
 *            表示该触摸事件在此被拦截，系统不再将此触摸事件传递到控件上
 *         false
 *            触摸事件将继续传递到控件上
 */
static bool onmode3ActivityTouchEvent(const MotionEvent &ev) {
    switch (ev.mActionStatus) {
		case MotionEvent::E_ACTION_DOWN://触摸按下
			//LOGD("时刻 = %ld 坐标  x = %d, y = %d", ev.mEventTime, ev.mX, ev.mY);
			break;
		case MotionEvent::E_ACTION_MOVE://触摸滑动
			break;
		case MotionEvent::E_ACTION_UP:  //触摸抬起
			break;
		default:
			break;
	}
	return false;
}
